package com.sigmatrix.h5.auth;

import java.util.Collection;

import com.sigmatrix.h5.entity.v2.DisPermission;
import com.sigmatrix.h5.entity.v2.DisRole;
import com.sigmatrix.h5.web.args.LoginParam;

/**
 * 身份认证
 * 
 * @author wei.wang
 *
 */
public interface IAuthenticate {

	/**
	 * 请求中会话key
	 */
	public static final String LOGIN_TOKEN = "token";
	
	/**
	 * 是否登陆
	 * 
	 * @param token
	 * @return
	 */
	boolean isLogin(String token);
	/**
	 * 获取登陆session
	 * 
	 * @param token
	 * @return
	 */
	LoginSession getLoginSession(String token);

	/**
	 * 设置登陆有效时间。
	 * 
	 * @param token
	 * @param timeout
	 */
	void expire(String token, long timeout);

	/**
	 * 进行用户认证
	 * 
	 * @param param
	 * @return
	 */
	AuthenticationInfo authenticate(LoginParam param);

	/**
	 * 获取角色
	 * @param authenticationInfo
	 * @return
	 */
	Collection<DisRole> getRoles(AuthenticationInfo authenticationInfo);

	/**
	 * 获取权限
	 * @param roles
	 * @param authenticationInfo
	 * @return
	 */
	Collection<DisPermission> getPermissions(Collection<DisRole> roles,AuthenticationInfo authenticationInfo);

	/**
	 * 登陆
	 * 
	 * @param param
	 * @return
	 */
	ILoginResponse login(LoginParam param);

	/**
	 * 注销
	 * 
	 * @param token
	 */
	void logout(String token);
	
	/**
	 * 生成token
	 * 
	 * @param authenticationInfo
	 * @return
	 */
	String generateToken(AuthenticationInfo authenticationInfo);
	
	/**
	 * 自定义转换响应数据。
	 * 
	 * @param session
	 * @return
	 */
	ILoginResponse convert(LoginSession session);

}
